Distributed systems, including server farms, web services, and distributed, network-attached storage systems have become increasingly common, providing vast amounts of computational and storage resources. Distributed storage systems use storage space across multiple nodes throughout a potentially wide-area network. Data access routines for accessing data stored on nodes in a distributed storage system gain efficiency in terms of lookup and access times by providing replicas of each data unit throughout the network. However, to maximize efficiency gains, it is necessary to carefully choose the location of each replica within the network of nodes. In addition to placing replicas for efficiency, replicas may also be placed to meet requirements of availability, consistency, integrity, and durability. One challenge is that the placement goals can be contradictory, making the choice of replica placement complex.